#include <bits/stdc++.h>

using namespace std;

const int N = 3010;
int a[N], b[N];
// f[i][j] 表示0-a[i]和0-b[j]中以b[j]结尾的公共子串中的最大值
int f[N][N];
int n;
int main()
{
    cin >> n;
    for (int i = 1; i <= n; ++i)
    {
        cin >> a[i];
    }
    for (int j = 1; j <= n; ++j)
    {
        cin >> b[j];
    }
    // 取a[i]和不取a[i];
    for (int i = 1; i <= n; ++i)
    {
        int maxv = 1;
        for (int j = 1; j <= n; ++j)
        {
            // 不取a[i]
            f[i][j] = f[i - 1][j];
            // 取a[i];
            // 优化前
            // if (a[i] == b[j])
            // {
            //     int maxv = 1;
            //     for (int k = 1; k < j; ++k)
            //     {
            //         if (a[i] > b[k])
            //         {
            //             maxv = max(maxv, f[i - 1][k] + 1);
            //         }
            //     }
            //     f[i][j] = max(maxv, f[i][j]);
            // }
            // 优化后
            if (a[i] == b[j])
                f[i][j] = max(f[i][j], maxv);
            if (a[i] > b[j])
            {
                maxv = max(maxv, f[i - 1][j] + 1);
            }
        }
    }
    int ret = 0;
    for (int i = 1; i <= n; ++i)
    {
        ret = max(ret, f[n][i]);
    }
    cout << ret << endl;
    return 0;
}